/*
 * Copyright (c) 2023 Cshoo Org. All Rights Reserved.
 */

package org.cshoo.tattoo.authorize.app;

import lombok.extern.slf4j.Slf4j;
import org.cshoo.tattoo.authorize.domain.po.Role;
import org.cshoo.tattoo.authorize.domain.service.RoleService;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author 杨翼
 * @since 1.0
 */
@Service
@Slf4j
public class RoleAppService {

    @Resource
    private RoleService roleService;

    public List<Role> findRolesByUserId(Long userId) {
        return roleService.findRolesByUserId(userId);
    }

    /**
     * 添加一个角色
     *
     * @param role 角色数据
     */
    public void addRole(Role role) {
        roleService.addRole(role);
    }

    /**
     * 修改一个角色
     *
     * @param role 角色
     */
    public void updateRole(Role role) {
        roleService.updateRole(role);
    }

    /**
     * 删除角色
     *
     * @param ids 角色id列表
     */
    public void deleteRoles(List<Long> ids) {
        roleService.deleteRoles(ids);
    }

    /**
     * 根据群组id查询角色
     *
     * @param groupId 群组id
     * @return 角色
     */
    public List<Role> findRolesByGroupId(Long groupId) {
        return roleService.findRolesByGroupId(groupId);
    }

    /**
     * 查询所有角色
     *
     * @return 角色
     */
    public Page<Role> findAllRoles(int pageNum, int pageSize) {
        return roleService.findAllRoles(pageNum, pageSize);
    }

    /**
     * 取消权限
     *
     * @param roleId       角色id
     * @param authorityIds 权限id
     */
    public void cancelAuthorities(Long roleId, List<Long> authorityIds) {
        roleService.cancelAuthorities(roleId, authorityIds);
    }

    /**
     * 给角色授权
     *
     * @param roleId       角色id
     * @param authorityIds 权限id
     */
    public void authorize(Long roleId, List<Long> authorityIds) {
        roleService.authorize(roleId, authorityIds);
    }

    /**
     * 根据角色名称模糊查询角色列表
     *
     * @param name 名称
     * @return 角色
     */
    public List<Role> findRolesByNameLike(String name) {
        return roleService.findRolesByNameLike(name);
    }

    /**
     * 授予菜单权限
     *
     * @param roleId 角色id
     * @param menuId 菜单id
     */
    public void authorizeMenu(Long roleId, Long menuId) {
        roleService.authorizeMenu(roleId, menuId);
    }

    /**
     * 取消菜单权限
     *
     * @param roleId 角色id
     * @param menuId 菜单id
     */
    public void cancelMenuAuthority(Long roleId, Long menuId) {
        roleService.cancelMenuAuthority(roleId, menuId);
    }

    /**
     * 授予按钮权限
     *
     * @param roleId   角色id
     * @param buttonId 按钮id
     */
    public void authorizeButton(Long roleId, Long buttonId) {
        roleService.authorizeButton(roleId, buttonId);
    }

    /**
     * 取消按钮权限
     *
     * @param roleId   角色id
     * @param buttonId 按钮id
     */
    public void cancelButtonAuthority(Long roleId, Long buttonId) {
        roleService.cancelButtonAuthority(roleId, buttonId);
    }
}
